/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Empregado;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 *
 * @author andrevieira
 */
public class Manutencao {

    public static final String MSG_ERRO_ARQUIVO = "Não foi possível criar o arquivo.";
    public static final String MSG_ERRO_CADASTRO = "Usuário já está cadastrado!";
    public static final String MSG_ERRO_NAO_CADASTRADO = "Usuário não está cadastrado!";

    // Verifica se o arquivo já existe
    public void arquivoExiste() throws Excecao {
        File arquivo = new File("arquivo.dat");
        if (!arquivo.exists()) {

            try {
                ObjectOutputStream f = new ObjectOutputStream(new FileOutputStream("arquivo.dat"));
            } catch (IOException ex) {
                throw new Excecao(MSG_ERRO_ARQUIVO);
            }
        }
    }
    
    // Verifica se um empregado existe
    public boolean consultarEmpregado(Empregado e) {
        Map<String, Empregado> mapa = new HashMap<String, Empregado>();
        LerArquivo leituraArquivo = new LerArquivo();

        mapa.putAll(leituraArquivo.recuperarEmpregado());

        Iterator<Map.Entry<String, Empregado>> iterador = mapa.entrySet().iterator();
        while (iterador.hasNext()) {
            if (iterador.next().getKey().equals(e.getCpf())) {
                return true;
            }
        }
        return false;
    }

    // Recebe CPF e retorna um objeto Empregado
    public Empregado retornaEmpregado(String cpf) throws Excecao {
        Map<String, Empregado> mapa = new HashMap<String, Empregado>();
        LerArquivo leituraArquivo = new LerArquivo();
        Empregado empr = new Empregado();
        mapa.putAll(leituraArquivo.recuperarEmpregado());

        Iterator<Map.Entry<String, Empregado>> iterador = mapa.entrySet().iterator();
        while (iterador.hasNext()) {

            empr = iterador.next().getValue();

            if (empr.getCpf().equalsIgnoreCase(cpf)) {
                return empr;
            }
        }
        throw new Excecao(MSG_ERRO_NAO_CADASTRADO);
    }

    // Inclui um empregado no arquivo
    public void incluirEmpregado(Empregado e) throws Excecao {
        try {
            GravarArquivo escritaArquivo;

            this.arquivoExiste();

            if (this.consultarEmpregado(e)) {
                throw new Excecao(MSG_ERRO_CADASTRO);
            } else {
                escritaArquivo = new GravarArquivo();
                escritaArquivo.adicionarEmpregado(e);
            }

        } catch (Excecao ex) {
            ex.getMessage();
            throw ex;
        }
    }

    // Modifica um Empregado no arquivo
    public void alterarEmpregado(Empregado e) throws Excecao {
        try {
            this.arquivoExiste();

            if (!this.consultarEmpregado(e)) {
                throw new Excecao(MSG_ERRO_NAO_CADASTRADO);
            } else {

                this.excluirEmpregado(e);
                this.incluirEmpregado(e);
            }

        } catch (Excecao ex) {
            ex.getMessage();
            throw ex;
        }
    }

    // Exclui um Empregado do arquivo
    public void excluirEmpregado(Empregado e) throws Excecao {

        try {
            GravarArquivo escritaArquivo;

            this.arquivoExiste();
            if (!this.consultarEmpregado(e)) {
                throw new Excecao(MSG_ERRO_NAO_CADASTRADO);
            } else {
                escritaArquivo = new GravarArquivo();
                escritaArquivo.removerEmpregado(e);
            }

        } catch (Excecao ex) {
            ex.getMessage();
            throw ex;
        }
    }
}
